<?php

namespace App\Providers;

use App\Models\Common\Adv\Repositories\AdvertisementRepository;
use App\Models\Common\Adv\Repositories\Interfaces\AdvertisementRepositoryInterface;
use App\Models\Common\Area\Repositories\AreaRepository;
use App\Models\Common\Area\Repositories\Interfaces\AreaRepositoryInterface;
use App\Models\Common\Channel\Repositories\ChannelRepository;
use App\Models\Common\Channel\Repositories\Interfaces\ChannelRepositoryInterface;
use App\Models\Logs\UserLoginLog\Repositories\Interfaces\UserLoginLogRepositoryInterface;
use App\Models\Logs\UserLoginLog\Repositories\UserLoginLogRepository;
use App\Models\Orders\Repositories\Interfaces\OrdersRepositoryInterface;
use App\Models\Orders\Repositories\OrdersRepository;
use App\Models\Passengers\Repositories\Interfaces\PassengerRepositoryInterface;
use App\Models\Passengers\Repositories\PassengerRepository;
use App\Models\Payment\Repositories\Interfaces\PaymentLogsRepositoryInterface;
use App\Models\Payment\Repositories\Interfaces\PaymentRepositoryInterface;
use App\Models\Payment\Repositories\PaymentLogsRepository;
use App\Models\Payment\Repositories\PaymentRepository;
use App\Models\Plane\Airports\Repositories\AirportRepository;
use App\Models\Plane\Airports\Repositories\Interfaces\AirportRepositoryInterface;
use App\Models\Plane\Cities\Repositories\Interfaces\PlaneCityRepositoryInterface;
use App\Models\Plane\Cities\Repositories\PlaneCityRepository;
use App\Models\Plane\PlaneOrderFlight\Repositories\Interfaces\PlaneOrderFlightRepositoryInterface;
use App\Models\Plane\PlaneOrderFlight\Repositories\PlaneOrderFlightRepository;
use App\Models\Plane\PlaneOrderPassengers\Repositories\Interfaces\PlaneOrderPassengerRepositoryInterface;
use App\Models\Plane\PlaneOrderPassengers\Repositories\PlaneOrderPassengerRepository;
use App\Models\Plane\PlaneOrders\Repositories\Interfaces\PlaneOrderRepositoryInterface;
use App\Models\Plane\PlaneOrders\Repositories\PlaneOrderRepository;
use App\Models\Task\SnapTasks\Repositories\Interfaces\SnapTaskRepositoryInterface;
use App\Models\Task\SnapTasks\Repositories\SnapTaskRepository;
use App\Models\Train\Stations\Repositories\Interfaces\StationRepositoryInterface;
use App\Models\Train\Stations\Repositories\StationRepository;
use App\Models\Train\TrainHistory\Repositories\Interfaces\TrainHistoryRepositoryInterface;
use App\Models\Train\TrainHistory\Repositories\TrainHistoryRepository;
use App\Models\Train\TrainOrderPassengers\Repositories\Interfaces\TrainOrderPassengersRepositoryInterface;
use App\Models\Train\TrainOrderPassengers\Repositories\TrainOrderPassengersRepository;
use App\Models\Train\TrainOrders\Repositories\Interfaces\TrainOrdersRepositoryInterface;
use App\Models\Train\TrainOrders\Repositories\TrainOrdersRepository;
use App\Models\Train\TrainOrderTrain\Repositories\Interfaces\TrainOrderTrainRepositoryInterface;
use App\Models\Train\TrainOrderTrain\Repositories\TrainOrderTrainRepository;
use App\Models\Train\TrainPoints\Repositories\Interfaces\TrainPointsRepositoryInterface;
use App\Models\Train\TrainPoints\Repositories\TrainPointsRepository;
use App\Models\Train\Trains\Repositories\Interfaces\TrainsRepositoryInterface;
use App\Models\Train\Trains\Repositories\TrainsRepository;
use App\Models\Train\TrainSeat\Repositories\Interfaces\TrainSeatRepositoryInterface;
use App\Models\Train\TrainSeat\Repositories\TrainSeatRepository;
use App\Models\Train\TrainSeatInfo\Repositories\Interfaces\TrainSeatInfoRepositoryInterface;
use App\Models\Train\TrainSeatInfo\Repositories\TrainSeatInfoRepository;
use App\Models\Train\TrainTripInfo\Repositories\Interfaces\TrainCheckingPortRepositoryInterface;
use App\Models\Train\TrainTripInfo\Repositories\Interfaces\TrainExitingPortRepositoryInterface;
use App\Models\Train\TrainTripInfo\Repositories\Interfaces\TrainTripInfoRepositoryInterface;
use App\Models\Train\TrainTripInfo\Repositories\TrainCheckingPortRepository;
use App\Models\Train\TrainTripInfo\Repositories\TrainExitingPortRepository;
use App\Models\Train\TrainTripInfo\Repositories\TrainTripInfoRepository;
use App\Models\Trip\History\Repositories\Interfaces\TripQueryHistoryRepositoryInterface;
use App\Models\Trip\History\Repositories\TripQueryHistoryRepository;
use App\Models\Trip\OrderBusiness\Repositories\BusinessOrderSnMapRepository;
use App\Models\Trip\OrderBusiness\Repositories\Interfaces\BusinessOrderSnMapRepositoryInterface;
use App\Models\Trip\OrderPay\Repositories\Interfaces\OrderPayDetailsRepositoryInterface;
use App\Models\Trip\OrderPay\Repositories\Interfaces\OrderPayRepositoryInterface;
use App\Models\Trip\OrderPay\Repositories\OrderPayDetailsRepository;
use App\Models\Trip\OrderPay\Repositories\OrderPayRepository;
use App\Models\Trip\TripOrderCosts\Repositories\Interfaces\TripOrderCostsRepositoryInterface;
use App\Models\Trip\TripOrderCosts\Repositories\Interfaces\TripOrderPassengerCostsRepositoryInterface;
use App\Models\Trip\TripOrderCosts\Repositories\TripOrderCostsRepository;
use App\Models\Trip\TripOrderCosts\Repositories\TripOrderPassengerCostsRepository;
use App\Models\User\Repositories\Interfaces\UserRepositoryInterface;
use App\Models\User\Repositories\Interfaces\WechatMiniAppUserRepositoryInterface;
use App\Models\User\Repositories\Interfaces\WechatOfficialUserRepositoryInterface;
use App\Models\User\Repositories\UserRepository;
use App\Models\User\Repositories\WechatMiniAppUserRepository;
use App\Models\User\Repositories\WechatOfficialUserRepository;
use Illuminate\Support\ServiceProvider;

class RepositoryServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        // 地区
        $this->app->bind(
            AreaRepositoryInterface::class,
            AreaRepository::class
        );

        // 火车车次
        $this->app->bind(
            TrainsRepositoryInterface::class,
            TrainsRepository::class
        );
        // 火车站
        $this->app->bind(
            StationRepositoryInterface::class,
            StationRepository::class
        );

        // 火车站
        $this->app->bind(
            TrainPointsRepositoryInterface::class,
            TrainPointsRepository::class
        );

        // 火车坐席
        $this->app->bind(
            TrainSeatRepositoryInterface::class,
            TrainSeatRepository::class
        );
        // 火车坐席详情
        $this->app->bind(
            TrainSeatInfoRepositoryInterface::class,
            TrainSeatInfoRepository::class
        );

        // 用户
        $this->app->bind(
            UserRepositoryInterface::class,
            UserRepository::class
        );
        // 小程序用户
        $this->app->bind(
            WechatMiniAppUserRepositoryInterface::class,
            WechatMiniAppUserRepository::class
        );


        // 小程序用户
        $this->app->bind(
            WechatOfficialUserRepositoryInterface::class,
            WechatOfficialUserRepository::class
        );

        // 用户登录日志
        $this->app->bind(
            UserLoginLogRepositoryInterface::class,
            UserLoginLogRepository::class
        );

        // 查询历史
        $this->app->bind(
            TrainHistoryRepositoryInterface::class,
            TrainHistoryRepository::class
        );

        // app渠道
        $this->app->bind(
            ChannelRepositoryInterface::class,
            ChannelRepository::class
        );

        // 广告
        $this->app->bind(
            AdvertisementRepositoryInterface::class,
            AdvertisementRepository::class
        );

        // 广告
        $this->app->bind(
            PassengerRepositoryInterface::class,
            PassengerRepository::class
        );

        //   order
        $this->app->bind(
            OrdersRepositoryInterface::class,
            OrdersRepository::class
        );


        //   order pay
        $this->app->bind(
            OrderPayRepositoryInterface::class,
            OrderPayRepository::class
        );

        //   order pay detail
        $this->app->bind(
            OrderPayDetailsRepositoryInterface::class,
            OrderPayDetailsRepository::class
        );

        // train order
        $this->app->bind(
            TrainOrdersRepositoryInterface::class,
            TrainOrdersRepository::class
        );
        // train snap task
        $this->app->bind(
            SnapTaskRepositoryInterface::class,
            SnapTaskRepository::class
        );

        // train trip info
        $this->app->bind(
            TrainTripInfoRepositoryInterface::class,
            TrainTripInfoRepository::class
        );

        // TrainCheckingPort
        $this->app->bind(
            TrainCheckingPortRepositoryInterface::class,
            TrainCheckingPortRepository::class
        );

        // TrainExitingPort
        $this->app->bind(
            TrainExitingPortRepositoryInterface::class,
            TrainExitingPortRepository::class
        );

        // train order train
        $this->app->bind(
            TrainOrderTrainRepositoryInterface::class,
            TrainOrderTrainRepository::class
        );

        // train order passenger
        $this->app->bind(
            TrainOrderPassengersRepositoryInterface::class,
            TrainOrderPassengersRepository::class
        );

        // trip order costs
        $this->app->bind(
            TripOrderCostsRepositoryInterface::class,
            TripOrderCostsRepository::class
        );

        // trip order costs
        $this->app->bind(
            TripOrderPassengerCostsRepositoryInterface::class,
            TripOrderPassengerCostsRepository::class
        );

        // payment
        $this->app->bind(
            PaymentRepositoryInterface::class,
            PaymentRepository::class
        );

        // payment log
        $this->app->bind(
            PaymentLogsRepositoryInterface::class,
            PaymentLogsRepository::class
        );


        // business order map
        $this->app->bind(
            BusinessOrderSnMapRepositoryInterface::class,
            BusinessOrderSnMapRepository::class
        );

        $this->app->bind(
            AirportRepositoryInterface::class,
            AirportRepository::class
        );

        $this->app->bind(
            PlaneCityRepositoryInterface::class,
            PlaneCityRepository::class
        );


        // 飞机订单
        $this->app->bind(
            PlaneOrderRepositoryInterface::class,
            PlaneOrderRepository::class
        );

        // 飞机订单乘客
        $this->app->bind(
            PlaneOrderPassengerRepositoryInterface::class,
            PlaneOrderPassengerRepository::class
        );

        /**
         * 飞机订单航班数据
         */
        $this->app->bind(
            PlaneOrderFlightRepositoryInterface::class,
            PlaneOrderFlightRepository::class
        );


        /**
         *  新历史记录
         */
        $this->app->bind(
            TripQueryHistoryRepositoryInterface::class,
            TripQueryHistoryRepository::class
        );
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}
